package com.hqully.smartfumehood.service;

import com.github.pagehelper.PageInfo;
import com.hqully.smartfumehood.common.vo.QueryVo;
import com.hqully.smartfumehood.entity.Device;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hqully.smartfumehood.entity.dto.DeviceDto;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;


/**
 * <p>
 *     设备管理服务类
 * </p>
 * @author liulingyu
 * @date 2022-03-10 13:00
 * @version 1.0
 */
public interface DeviceService extends IService<Device> {



    /**
     * <p>
     *     根据[queryVo]的参数条件查询设备
     * </p>
     * @date 2022/5/8 13:00 <br>
     * @author liulingyu <br>
     * @param queryVo 查询参数
     * @return {@link PageInfo< DeviceDto>} 设备DTO列表
     */
    public PageInfo<DeviceDto> findAllDevice(QueryVo queryVo);


    /**
     * <p>
     *     根据[queryVo]的参数[unitId || status]条件查询设备数
     * </p>
     * @date 2022/5/8 13:01 <br>
     * @author liulingyu <br>
     * @param queryVo 查询参数
     * @return {@link long} 设备数量
     */
    public long findDeviceCount(QueryVo queryVo);


    /**
     * <p>
     *     根据设备状态查询设备
     * </p>
     * @deprecated 功能已整合至{@link #findAllDevice(QueryVo)}
     * @date 2022/5/8 13:05 <br>
     * @author liulingyu <br>
     * @param queryVo 查询参数
     * @return {@link PageInfo< DeviceDto>} 设备DTO列表
     */
    public PageInfo<DeviceDto> findDeviceByStatus(QueryVo queryVo);



    /**
     * <p>
     *     根据[did]查询设备
     * </p>
     * @deprecated 功能已整合至{@link #findAllDevice(QueryVo)}
     * @date 2022/5/8 13:06 <br>
     * @author liulingyu <br>
     * @param did 设备ID
     * @return {@link DeviceDto} 设备DTO实体类
     */
    public DeviceDto findDeviceByDid(@Param("id") String did);


    /**
     * <p>
     *     根据[labId]查询设备
     * </p>
     * @deprecated 功能已整合至{@link #findAllDevice(QueryVo)}
     * @date 2022/5/8 13:07 <br>
     * @author liulingyu <br>
     * @param labId 实验室ID
     * @return {@link DeviceDto} 设备列表
     */
    public DeviceDto findDeviceByLabId(@Param("labId") String labId);


    /**
     * <p>
     *     添加设备
     * </p>
     * @date 2022/5/8 13:08 <br>
     * @author liulingyu <br>
     * @param device 设备实体类
     * @return {@link int}
     */
    public int addDevice(Device device);


    /**
     * <p>
     *     通过设备ID删除设备
     * </p>
     * @date 2022/5/8 13:09 <br>
     * @author liulingyu <br>
     * @param did 设备ID
     * @return {@link int}
     */
    public int deleteDevice(@Param("id") String did);


    /**
     * <p>
     *     更新设备
     * </p>
     * @date 2022/5/8 13:09 <br>
     * @author liulingyu <br>
     * @param device 设备实体类
     * @return {@link int}
     */
    public int updateDevice(Device device);

    /**
     * <p>
     *     更新设备的状态(开启/关闭/异常)
     * </p>
     * @date 2022/6/29 15:05 <br>
     * @author liulingyu <br>
     * @param status 设备状态：0:关闭,1:开启,2:异常
     * @param id 设备ID
     * @return {@link int}
     */
    int updateStatusById(Integer status, String id);

    /**
     * <p>
     *     根据设备id更新设备的状态(开启/关闭/异常)
     * </p>
     * @author liulingyu
     * @date 2022-07-04 20:47
     * @version
     */
    /**
     * <p>
     *     根据设备id更新设备的状态(开启/关闭/异常)
     * </p>
     * @date 2022/7/4 20:48 <br>
     * @author liulingyu <br>
     * @param status 设备状态
     * @param id 设备id
     * @param time 设备数据时间
     * @return {@link int}
     */
    int updateDeviceStatusAndRecordById(Integer status, String id, LocalDateTime time);

}
